package cn.cau.epidemicsurveysystem.control;

import cn.cau.epidemicsurveysystem.bean.EpidTemplateBean;
import cn.cau.epidemicsurveysystem.bean.EpidTemplateOptionBean;
import cn.cau.epidemicsurveysystem.bean.EpidTemplateQuestionBean;
import cn.cau.epidemicsurveysystem.service.TemplateService;
import cn.cau.epidemicsurveysystem.vo.FrontQuestionVO;
import cn.cau.epidemicsurveysystem.vo.FrontTemplateVO;
import cn.cau.epidemicsurveysystem.vo.TemplateVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List;

/**
 * @projectName: gp2022
 * @package: cn.cau.epidemicsurveysystem.control
 * @className: TemplateController
 * @author: zy
 * @description: 该控制器用于完成从前端接受数据，并将其封装为TemplateVO，以及将一个TemplateAnsVO传递给前端数据
 * @date: 2022/3/2 9:07
 * @version: 1.0
 */
@Controller
@RequestMapping("/template")
public class TemplateController {
    @Autowired
    TemplateService templateService;

    /**
     * @param id: 需要返回的模板的名称
      * @return TemplateVO
     * @author zy
     * @description ：根据模板的名称，查找对应的模板信息，包括所有的问题，及问题对应的所有选项
     * @date 2022/3/2 11:15
     */

    @RequestMapping(value = "/id")
    public ModelAndView getTemplateById(@RequestParam("id") int id, HttpServletRequest request){
        ModelAndView modelAndView = new ModelAndView();
        TemplateVO template=templateService.getTemplateVOById(id);
        modelAndView.addObject("template",template);
        modelAndView.setViewName("flow_template_detail");
        return modelAndView;
    }

    /**
     * @param :
      * @return List<EpidTemplateBean>
     * @author zy
     * @description 查询所有模板的基本信息
     * @date 2022/3/2 11:44
     */
    //流调任务列表
    @RequestMapping(value = "/all")
    public ModelAndView getAllTemplate(HttpServletRequest request){
        ModelAndView modelAndView = new ModelAndView();
        List<EpidTemplateBean> EpidTemplateBeans =templateService.getAllTemplate();;
        modelAndView.addObject("EpidTemplateBeans",EpidTemplateBeans);
        modelAndView.setViewName("flow_template_forall");
        return  modelAndView;
    }

    @PostMapping("/postTemplate")
    @ResponseBody
    public ModelAndView postTemplate(@RequestBody List<FrontQuestionVO> questions) throws IOException {
        //插入epidTemplate表
        EpidTemplateBean template = templateService.addTemplate(new EpidTemplateBean());

        //设置模板问题个数
        template.setQuestionNum(questions.size()-1);


        //存储修改
        templateService.addTemplate(template);

        int template_id = template.getEpidTemplateId();

        //插入EpidTemplateQuestion表
        for(FrontQuestionVO question:questions){
            //首先处理template标题及其描述
            if(question.getItemOrdinal()==-1){
                template.setTemplateName(question.getTitle());
                template.setDescription(question.getItems().get(0));
                templateService.addTemplate(template);
            }
            //向数据库中创建一个新的实体，同时返回其对应的bean对象
            else{
                EpidTemplateQuestionBean n_question = new EpidTemplateQuestionBean();
                n_question.setEpidTemplateId(template_id);  //首先必须设置问题所对应的模板id，否则不满足外键约束
                n_question = templateService.addQuestion(n_question);  //将其插入到表中

                //设置问题类型
                if(question.getItemTypeName().equals("SingleItem")) {
                    n_question.setQuestionType(0);   //单选
                }
                else if(question.getItemTypeName().equals("MultiItem")) {
                    n_question.setQuestionType(1);  //多选
                }
                else {
                    n_question.setQuestionType(2);
                }

                //设置问题题目
                n_question.setQuestionName(question.getTitle());

                //设置问题选项个数
                n_question.setOptionNum(question.getItems().size());

                //设置问题位置
                n_question.setQuestionPos(question.getItemOrdinal());

                //存储修改
                templateService.addQuestion(n_question);

                int question_id = n_question.getEpidTemplateQuestionId();

                //如果不是填空题，还需要插入epidTemplateOption表
                if(n_question.getQuestionType()!=2){
                    for(int i=0;i<question.getItems().size();i++){
                        //向数据库中创建一个新的实体，同时返回其对应的bean对象
                        EpidTemplateOptionBean n_option = new EpidTemplateOptionBean();
                        n_option.setEpidTemplateQuestionId(question_id);   //设置对应的问题id
                        n_option = templateService.addOption(n_option);

                        //设置问题的值
                        n_option.setOptionValue(question.getItems().get(i));
                        //设置问题位置
                        n_option.setOptionPos(i);
                        templateService.addOption(n_option);
                    }
                }
            }

        }

        ModelAndView modelAndView = new ModelAndView();
        List<EpidTemplateBean> EpidTemplateBeans =templateService.getAllTemplate();;
        modelAndView.addObject("EpidTemplateBeans",EpidTemplateBeans);
        modelAndView.setViewName("flow_template_forall");
        return  modelAndView;
    }

}
